#ifndef __A9MAIN_H_
#define __A9MAIN_H_

#include <pthread.h>
#include<stdio.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<fcntl.h>
#include<stdlib.h>
#include<errno.h>
#include<unistd.h>
#include<sys/sem.h>
#include<sys/types.h>
#include <sys/msg.h>
#include <string.h>
#include "cgic.h"
#include "sem.h"
//以上为共享内存，信号量，线程所需的头文件

#define LED 2
#define BUZZER 1
#define FAN 3



#define ON 2
#define OFF 1
#define FAN_ON_1 2
#define FAN_ON_2 2
#define FAN_ON_3 2


// 最大最小值状态结构体
typedef  struct __status
{
	int tem_max;
	int tem_min;
	int light_max;
	int light_min;
	int hum_max;
	int hum_min;
}status;

//M0通过ZIGBEE向A9发送过来的仓库信息结构体
 typedef struct __shm_addr
{
	int temp[2];	 //温度
	int hum[2];		 //湿度
	int x;			 //三轴信息
	int y;			 
	int z;		 	
	int light;		 //光照
	int goods_flags;
}shm_addr_t;



//CGI进程向A9主进程传送的网页端控制命令结构体
typedef struct CGI_cmd
{
	long mytype;
	int type;//CGI发送的命令类型，包括三种：设置最大值最小值，M0控制命令，摄像头抓拍命令
	char text[100];//消息正文，具体接收后强转为对应结构体使用
}CGI_cmd;


//以下是CGI发送的命令的三种类型及相应结构体定义

#define M0_ctl 5
#define set_ctl 6
#define ato_ctl 20

//1.第一种控制M0的命令结构体，也是A9向M0发送的控制命令的结构体
typedef struct cmd
{
	char dev;
	char command;
}M0_cmd;
#if 0 
//2.第二种设置最大值最小值的结构体
typedef struct set_cmd
{
	int flags;//此标志位低6位二进制位分别表示tem_max,tem_min, light_max, 
	          //light_min, hum_max, hum_min是否有更改。0表示无更改，1表示有更改 
	status new_status;
}set_cmd;
#endif
#endif
